perm filename FILES.SAI[JLG,SYS] blob
sn#811655 filedate 1986-03-02 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00013 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGOF("FILES")
C00003 00003 IFK PASSONE THENK
C00004 00004 IFK PASSONE THENK
C00006 00005 IFSITE TENEX THENK
C00007 00006 IFSITE CMUVER THENK
C00008 00007 IFK PASSONE THENK
C00013 00008 IFSITE TENEX THENK TES 10/25/73
C00014 00009 IFSITE TENEX THENK
C00015 00010 IFSITE TENEX THENK
C00017 00011 IFK PASSONE THENK
C00018 00012 IFSITE TENEX THENK
C00020 00013 FINISHED
C00021 ENDMK
C⊗;
BEGOF("FILES")
COMMENT
*** Variations at Different Sites for Most Procedures ***
Processing of input file names and opening of input files is
installation-dependent. Most of the options are handled by a single
routine called OPENTOREAD.
Output file opening is simpler and handled by WRITEON.
;
IFC TENEX THENC
DEFINE CHANGE(A,B)= [IF NULSTR(A) AND FULSTR(B) THEN B ELSE 0];
ELSEC
DEFINE CHANGE(A,B)= [IF A=0 THEN B ELSE 0];
ENDC
PROCEDURES
IFK PASSONE THENK
PUBLIC SIMPLE PROCEDURE FILES! ;$"#
BEGIN "FILES!"
THISFILE ← "(NO FILE)" ;
MAINFILE ← INFILE ;
END "FILES!" ;
ENDC
IFK PASSONE THENK
PUBLIC SIMPLE PROCEDURE FINIFILES ;$"#
BEGIN "FINIFILES"
IF GENREXT THEN OUTFILE ← OUTFILE &
IFC CMUVER THENC (IF ABS(DEVICE)=XGP THEN ".XGO" ELSE ".DOC") ENDC
COMMENT changed by jlg 8/20/85 to include a prepress extension
IFC SAILVER THENC (IF ABS(DEVICE)=XGP THEN ".XGP" ELSE ".DOC") ENDC ;
IFC SAILVER THENC (IF ABS(DEVICE)=XGP THEN ".XGP" ELSE
IF Abs(Device) = MIC THEN ".PRE" ELSE ".DOC") ENDC
IFCR PARCVER THENC PARCEXT ENDC
IFC ISIVER THENC (IF ABS(DEVICE)=XGP THEN ".XGO" ELSE ".DOC") ENDC RT01 10/25/74;
IFC ITSVER THENC DOCEXT ENDC; PJ 5/27/74;
END "FINIFILES" ;
ENDC
IFSITE TENEX THENK
PRIVATE SITE(TENEX) STRING SIMPLE PROCEDURE CVFIL(STRING FILENAME; REFERENCE STRING EXT, PPN) ;$"#
BEGIN
STRING NAME ;
PPN ← IF FILENAME[1 FOR 1] = "<" THEN SCANTO(">", FILENAME, TRUE) ELSE NULL ;
NAME ← SCANTO(".;", FILENAME, FALSE) ;
EXT ← IF FILENAME[1 FOR 1] = "." THEN SCANTO(";", FILENAME, FALSE) ELSE NULL ;
RETURN(NAME) ;
END ;
ENDC
IFSITE CMUVER THENK
PRIVATE SITE(CMUVER) STRING SIMPLE PROCEDURE CVPPN(INTEGER VALUE) ;$"#
BEGIN "CVPPN"
OWN SAFE INTEGER ARRAY A[0:1];
INTEGER ERRSW;
STRING S;
DEFINE CALLI="'47000000000", DECCMU="-3";
IF VALUE = 0 THEN RETURN (NULL);
A[0]←A[1]←0;
START!CODE
SETZM 0,ERRSW;
MOVE 1,A;
HRLI 1,VALUE;
CALLI 1,DECCMU;
SETOM 0,ERRSW;
END;
RETURN ("["&
( IF ERRSW THEN (CVOS(VALUE LSH -18)&","&CVOS(VALUE LAND '777777))
ELSE (CVSTR(A[0])&CVSTR(A[1])[1 FOR 3]) )
& "]");
END "CVPPN";
ENDC
IFK PASSONE THENK
PUBLIC INTEGER PROCEDURE OPENTOREAD(INTEGER MODE ;
STRING FILEKIND ; REFERENCE STRING FILENAME;
IFC TENEX THENC STRING ELSEC INTEGER ENDC EXTDEFAULT, PPNDEFAULT) ;$"#
BEGIN TES 8/24/74 PROCEDURIZED ;
label labeltogetaroundcompilerbug;
INTEGER CHAN, C ; BOOLEAN GOTIT ;
IFC TENEX THENC STRING ELSEC INTEGER ENDC FEXT, FPPN, EXTD, PPNI, PPND, NAME, EXT, PPN ;
STRING NF ;
STRING INDEVICE ; RKJ: 5-17-74 ;
SETBREAK(LOCAL!TABLE,":",NULL,"IS");
IF (CHAN←GETCHAN)<0 THEN EARLYWARNING("NO CHANNELS ARE LEFT FOR INPUT!") ;
EOF ← 0 ;
GOTIT ← FALSE ;
DO BEGIN "NAMELOOP"
RKJ: 6-FEB-75 MOVED NEX THREE LINES INSIDE LOOP;
INDEVICE←SCAN(FILENAME,LOCAL!TABLE,DUMMY);
IF NULSTR(FILENAME) THEN BEGIN FILENAME←INDEVICE; INDEVICE←"DSK" END ;
OPEN(CHAN,INDEVICE,MODE, 2,0,150,BRC,EOF);
NAME ← CVFIL(FILENAME, FEXT, FPPN) ;
FOR C ← 0 THRU 5 DO
BEGIN
EXT ← FEXT ; PPN ← FPPN ;
CASE C OF
BEGIN "LKPCASES"
BEGIN END ;
IF (EXTD←EXT←CHANGE(FEXT, EXTDEFAULT)) = 0 THEN CONTINUE ;
IF (PPNI←PPN←CHANGE(FPPN, INPPN)) = 0 THEN CONTINUE ;
IF (EXT←EXTD) = 0 OR (PPN←PPNI) = 0 THEN CONTINUE ;
IF (PPND←PPN←CHANGE(FPPN, PPNDEFAULT)) = 0 THEN CONTINUE ;
IF (EXT←EXTD)=0 OR (PPN←PPND)=0 THEN CONTINUE ;
END "LKPCASES" ;
GOTIT ← XLOOKUP(CHAN,NAME,EXT,0,PPN);
IF GOTIT THEN DONE ;
END ;
IF GOTIT THEN DONE ;
IFC PARCVER THENC TES 10/21/74 SO FONT 2 "SERIF" WORKS ;
IF FILEKIND[1 TO 4] = "Font" AND FULSTR(NF←FONTEQUIV(NAME)) THEN
FILENAME ← NF ELSE
ENDC
BEGIN
IF NOT SWDBACK THEN OUTSTR(CRLF) ; SWDBACK ← TRUE ;
OUTSTR(FILEKIND & FILENAME & " not found." & CRLF & "Read file: ");
IFC TENEX THENC
RELEASE(CHAN);
OUTSTR(PPND←PPNDEFAULT) ;
DO BEGIN TES 10/22/74 ;
CHAN ← GTJFNL(PPND,'162000000000,'100000101,
NULL,PPNDEFAULT[2 TO ∞-1],
NAME,EXTDEFAULT[2 TO ∞],
NULL, NULL, NULL) ;
IF CHAN>-1 THEN DONE ;
OUTSTR("XXX"&CRLF&"Read file: ") ; PPND←NULL ;
END
UNTIL FALSE ;
SETINPUT(CHAN,150,BRC,EOF) ; TES 10/16/74 ;
OPENF(CHAN, 2) ;
DONE ;
ELSEC
FILENAME ← INCHWL ;
IFC CMUVER THENC
IF NULSTR(FILENAME) THEN FILENAME←"NULL:EMPTY";
ENDC RKJ: 6-FEB-75;
ENDC
END ;
END "NAMELOOP"
UNTIL GOTIT ;
labeltogetaroundcompilerbug:
IFC TENEX THENC TES 4/13/75 ;
IF FILEKIND[1 TO 4] = "Font" THEN
FILENAME ← JFNS(CHAN, '211100000001) ELSE
ENDC
FILENAME ← UNCVFIL(CHAN, NAME, EXT, PPN) ;
RETURN(CHAN) ;
END "OPENTOREAD" ;
ENDC
IFSITE TENEX THENK TES 10/25/73 ;
PRIVATE SITE(TENEX) STRING PROCEDURE SCANTO(STRING BRKS; REFERENCE STRING SCANNEE; BOOLEAN INCLUDE) ;$"#
BEGIN
INTEGER DUMMY ;
SETBREAK(LOCAL!TABLE, BRKS, NULL, IF INCLUDE THEN "IA" ELSE "IR") ;
RETURN(SCAN(SCANNEE, LOCAL!TABLE, DUMMY)) ;
END ;
ENDC
IFSITE TENEX THENK
PUBLIC SITE(TENEX) SIMPLE PROCEDURE SFBSZ(INTEGER CHAN, SIZE) ;$"#
BEGIN "SFBSZ"
INTEGER K ;
DEFINE JSYS=['104000000000], SFBSZ=[JSYS '46];
K ← CVJFN(CHAN) ;
START!CODE "BYTE16"
MOVE 1,K; MOVE 2,SIZE; SFBSZ ;
END "BYTE16" ;
END "SFBSZ" ;
ENDC
IFSITE TENEX THENK
PUBLIC SITE(TENEX) SIMPLE STRING PROCEDURE UNCVFIL(INTEGER CHAN; STRING NAME, EXT, PPN) ;$"#
RETURN(JFNS(CHAN, 0)) ;
ENDC
IFK PASSONE OR PASSTWO THENK
IFSITE NOT TENEX THENK
PUBLIC SITE(NOT TENEX) SIMPLE STRING PROCEDURE UNCVFIL(INTEGER CHAN, NAME, EXT, PPN) ;$"#
BEGIN
IFC ITSVER THENC PJ 11/9/74 I DON'T LIKE TRAILING SPACES OF SYSTEM CVXSTR ;
SIMPLE STRING PROCEDURE CVXSTR(INTEGER SIXBIT);
BEGIN
STRING RETSTR;
SIMPLE INTEGER PROCEDURE CHAR(REFERENCE INTEGER A);
START!CODE
MOVEI 1,0;
MOVE 2,A;
LSHC 1,6;
MOVEM 2,A;
ADDI 1,'40;
END;
RETSTR←NULL;
WHILE SIXBIT NEQ 0 DO RETSTR←RETSTR&CHAR(SIXBIT);
RETURN(RETSTR)
END ;
ENDC
RETURN(
IFC SAILVER THENC
CV6STR(NAME) &
(IF EXT=0 THEN NULL ELSE "." & CV6STR(EXT)[1 TO 3]) &
(IF PPN=0 THEN NULL ELSE "[" & CVXSTR(PPN)[1 TO 3] &
"," & CVXSTR(PPN)[4 TO 6] & "]")
ENDC
IFC CMUVER THENC
CVXSTR(NAME) &
(IF EXT=0 THEN NULL ELSE "." & CVXSTR(EXT)[1 TO 3]) &
CVPPN(PPN)
ENDC
IFC ITSVER THENC PJ 11/7/74 ;
(IF PPN=0 THEN NULL ELSE CVXSTR(PPN)&";")&CVXSTR(NAME)&" "&CVXSTR(EXT)
ENDC
) ;
END;
ENDC
ENDC
IFK PASSONE THENK
PUBLIC INTEGER SIMPLE PROCEDURE WRITEON(BOOLEAN BINARY; STRING FILENAME) ;$"#
BEGIN "WRITEON"
INTEGER CH ;
IF (CH ← GETCHAN) < 0 THEN
BEGIN
WARN("=",<"No channel for writing "&FILENAME>);
RETURN(-1) ;
END ;
K ← 0 ; OPEN(CH, "DSK", IF BINARY THEN 8 ELSE 0, 0, 2, DUMMY, DUMMY, K) ;
ENTER(CH, FILENAME, DUMMY←0) ;
IF DUMMY THEN WARN("=","ENTER failed for "&FILENAME);
RETURN(CH) ;
END "WRITEON" ;
ENDC
IFSITE TENEX THENK
PUBLIC SITE(TENEX) BOOLEAN SIMPLE PROCEDURE XLOOKUP(INTEGER CHAN; STRING NAME, EXT; INTEGER JUNK; STRING PPN) ;$"#
BEGIN COMMENT RETURNS TRUE IF SUCCESSFUL ;
BOOLEAN FLAG ;
LOOKUP(CHAN, PPN & NAME & EXT, FLAG) ;
RETURN(NOT FLAG) ;
END ;
ENDC
IFK PASSONE THENK
IFSITE NOT TENEX THENK
PUBLIC SITE(NOT TENEX) BOOLEAN SIMPLE PROCEDURE XLOOKUP(INTEGER CHAN, NAME, EXT, JUNK, PPN) ;$"#
START!CODE "XLOOKUP"
MOVE 2,CHAN;
LSH 2,23;
IFC ITSVER
THENC IOR 2,['027017777774] PJ 5/28/74 ;
ELSEC IOR 2,['076017777774] ENDC ; COMMENT LOOKUP 0,-4(17) ;
SETO 1,0; COMMENT TRUE ;
XCT 0,2;
SETZ 1,0; COMMENT FALSE ;
END "XLOOKUP";
ENDC
ENDC
FINISHED
ENDOF("FILES")